home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / tex / texsrc.arc / TEX2.C < prev    next >
C/C++ Source or Header  |  1988-09-14  |  46KB  |  2,010 lines

  1. overlay "tex2"
  2. #define EXTERN extern
  3. #include "texd.h"
  4.  
  5.  
  6. #ifdef STAT
  7. zshoweqtb ( n ) 
  8. halfword n ; 
  9. {r_showeqtb 
  10.   if ( n < 1 ) 
  11.   printchar ( 63 ) ; 
  12.   else if ( n < 3526 ) 
  13.   {
  14.     sprintcs ( n ) ; 
  15.     printchar ( 61 ) ; 
  16.     printcmdchr ( eqtb [ n ] .hh.b0 , eqtb [ n ] .hh .v.RH ) ; 
  17.     if ( eqtb [ n ] .hh.b0 >= 110 ) 
  18.     {
  19.       printchar ( 58 ) ; 
  20.       showtokenlis ( mem [(long) eqtb [ n ] .hh .v.RH ] .hh .v.RH , 0 , 32 ) ; 
  21.     } 
  22.   } 
  23.   else if ( n < 4056 ) 
  24.   if ( n < 3544 ) 
  25.   {
  26.     printskippar ( n - 3526 ) ; 
  27.     printchar ( 61 ) ; 
  28.     if ( n < 3541 ) 
  29.     printspec ( eqtb [ n ] .hh .v.RH , 262 ) ; 
  30.     else printspec ( eqtb [ n ] .hh .v.RH , 205 ) ; 
  31.   } 
  32.   else if ( n < 3800 ) 
  33.   {
  34.     printesc ( 260 ) ; 
  35.     printint ( n - 3544 ) ; 
  36.     printchar ( 61 ) ; 
  37.     printspec ( eqtb [ n ] .hh .v.RH , 262 ) ; 
  38.   } 
  39.   else { 
  40.     printesc ( 261 ) ; 
  41.     printint ( n - 3800 ) ; 
  42.     printchar ( 61 ) ; 
  43.     printspec ( eqtb [ n ] .hh .v.RH , 205 ) ; 
  44.   } 
  45.   else if ( n < 5267 ) 
  46.   if ( n == 4056 ) 
  47.   {
  48.     printesc ( 273 ) ; 
  49.     printchar ( 61 ) ; 
  50.     if ( eqtb [ 4056 ] .hh .v.RH == 0 ) 
  51.     printchar ( 48 ) ; 
  52.     else printint ( mem [(long) eqtb [ 4056 ] .hh .v.RH ] .hh .v.LH ) ; 
  53.   } 
  54.   else if ( n < 4066 ) 
  55.   {
  56.     printcmdchr ( 71 , n ) ; 
  57.     printchar ( 61 ) ; 
  58.     if ( eqtb [ n ] .hh .v.RH != 0 ) 
  59.     showtokenlis ( mem [(long) eqtb [ n ] .hh .v.RH ] .hh .v.RH , 0 , 32 ) ; 
  60.   } 
  61.   else if ( n < 4322 ) 
  62.   {
  63.     printesc ( 272 ) ; 
  64.     printint ( n - 4066 ) ; 
  65.     printchar ( 61 ) ; 
  66.     if ( eqtb [ n ] .hh .v.RH != 0 ) 
  67.     showtokenlis ( mem [(long) eqtb [ n ] .hh .v.RH ] .hh .v.RH , 0 , 32 ) ; 
  68.   } 
  69.   else if ( n < 4578 ) 
  70.   {
  71.     printesc ( 274 ) ; 
  72.     printint ( n - 4322 ) ; 
  73.     printchar ( 61 ) ; 
  74.     if ( eqtb [ n ] .hh .v.RH == 0 ) 
  75.     print ( 275 ) ; 
  76.     else { 
  77.       depththresho = 0 ; 
  78.       breadthmax = 1 ; 
  79.       shownodelist ( eqtb [ n ] .hh .v.RH ) ; 
  80.     } 
  81.   } 
  82.   else if ( n < 4627 ) 
  83.   {
  84.     if ( n == 4578 ) 
  85.     print ( 276 ) ; 
  86.     else if ( n < 4595 ) 
  87.     {
  88.       printesc ( 277 ) ; 
  89.       printint ( n - 4579 ) ; 
  90.     } 
  91.     else if ( n < 4611 ) 
  92.     {
  93.       printesc ( 278 ) ; 
  94.       printint ( n - 4595 ) ; 
  95.     } 
  96.     else { 
  97.       printesc ( 279 ) ; 
  98.       printint ( n - 4611 ) ; 
  99.     } 
  100.     printchar ( 61 ) ; 
  101.     printesc ( hash [ 3268 + eqtb [ n ] .hh .v.RH ] .v.RH ) ; 
  102.   } 
  103.   else if ( n < 5139 ) 
  104.   {
  105.     if ( n < 4755 ) 
  106.     {
  107.       printesc ( 280 ) ; 
  108.       printint ( n - 4627 ) ; 
  109.     } 
  110.     else if ( n < 4883 ) 
  111.     {
  112.       printesc ( 281 ) ; 
  113.       printint ( n - 4755 ) ; 
  114.     } 
  115.     else if ( n < 5011 ) 
  116.     {
  117.       printesc ( 282 ) ; 
  118.       printint ( n - 4883 ) ; 
  119.     } 
  120.     else { 
  121.       printesc ( 283 ) ; 
  122.       printint ( n - 5011 ) ; 
  123.     } 
  124.     printchar ( 61 ) ; 
  125.     printint ( eqtb [ n ] .hh .v.RH ) ; 
  126.   } 
  127.   else { 
  128.     printesc ( 284 ) ; 
  129.     printint ( n - 5139 ) ; 
  130.     printchar ( 61 ) ; 
  131.     printint ( eqtb [ n ] .hh .v.RH ) ; 
  132.   } 
  133.   else if ( n < 5701 ) 
  134.   {
  135.     if ( n < 5317 ) 
  136.     printparam ( n - 5267 ) ; 
  137.     else if ( n < 5573 ) 
  138.     {
  139.       printesc ( 336 ) ; 
  140.       printint ( n - 5317 ) ; 
  141.     } 
  142.     else { 
  143.       printesc ( 337 ) ; 
  144.       printint ( n - 5573 ) ; 
  145.     } 
  146.     printchar ( 61 ) ; 
  147.     printint ( eqtb [ n ] .cint ) ; 
  148.   } 
  149.   else if ( n <= 5976 ) 
  150.   {
  151.     if ( n < 5721 ) 
  152.     printlengthp ( n - 5701 ) ; 
  153.     else { 
  154.       printesc ( 359 ) ; 
  155.       printint ( n - 5721 ) ; 
  156.     } 
  157.     printchar ( 61 ) ; 
  158.     printscaled ( eqtb [ n ] .cint ) ; 
  159.     print ( 262 ) ; 
  160.   } 
  161.   else printchar ( 63 ) ; 
  162. #endif /* STAT */
  163. halfword zidlookup ( j , l ) 
  164. integer j , l ; 
  165. {/* 40 */ register halfword Result; r_idlookup 
  166.   integer h ; 
  167.   halfword p ; 
  168.   halfword k ; 
  169.   h = buffer [ j ] ; 
  170.   for ( k = j + 1 ; k <= j + l - 1 ; k ++ ) 
  171.   {
  172.     h = h + h + buffer [ k ] ; 
  173.     while ( h >= 2551 ) h = h - 2551 ; 
  174.   } 
  175.   p = h + 258 ; 
  176.   while ( true ) { 
  177.     if ( hash [ p ] .v.RH > 0 ) 
  178.     if ( ( strstart [ hash [ p ] .v.RH + 1 ] - strstart [ hash [ p ] .v.RH ] ) 
  179.     == l ) 
  180.     if ( streqbuf ( hash [ p ] .v.RH , j ) ) 
  181.     goto lab40 ; 
  182.     if ( hash [ p ] .v.LH == 0 ) 
  183.     {
  184.       if ( nonewcontrol ) 
  185.       p = 3525 ; 
  186.       else { 
  187.     if ( hash [ p ] .v.RH > 0 ) 
  188.     {
  189.       do { if ( ( hashused == 258 ) ) 
  190.         overflow ( 362 , 3000 ) ; 
  191.         decr ( hashused ) ; 
  192.       } while ( ! ( hash [ hashused ] .v.RH == 0 ) ) ; 
  193.       hash [ p ] .v.LH = hashused ; 
  194.       p = hashused ; 
  195.     } 
  196.     {
  197.       if ( poolptr + l > poolsize ) 
  198.       overflow ( 128 , poolsize - initpoolptr ) ; 
  199.     } 
  200.     for ( k = j ; k <= j + l - 1 ; k ++ ) 
  201.     {
  202.       strpool [ poolptr ] = buffer [ k ] ; 
  203.       incr ( poolptr ) ; 
  204.     } 
  205.     hash [ p ] .v.RH = makestring () ; 
  206.  
  207. #ifdef STAT
  208.     incr ( cscount ) ; 
  209. #endif /* STAT */
  210.       } 
  211.       goto lab40 ; 
  212.     } 
  213.     p = hash [ p ] .v.LH ; 
  214.   } 
  215.   lab40: Result = p ; 
  216.   return(Result) ; 
  217.  
  218. #ifdef INITEX
  219. zprimitive ( s , c , o ) 
  220. strnumber s ; 
  221. quarterword c ; 
  222. halfword o ; 
  223. {r_primitive 
  224.   poolpointer k ; 
  225.   smallnumber j ; 
  226.   smallnumber l ; 
  227.   if ( s < 128 ) 
  228.   curval = s + 129 ; 
  229.   else { 
  230.     k = strstart [ s ] ; 
  231.     l = strstart [ s + 1 ] - k ; 
  232.     for ( j = 0 ; j <= l - 1 ; j ++ ) 
  233.     buffer [ j ] = strpool [ k + j ] ; 
  234.     curval = idlookup ( 0 , l ) ; 
  235.     {
  236.       decr ( strptr ) ; 
  237.       poolptr = strstart [ strptr ] ; 
  238.     } 
  239.     hash [ curval ] .v.RH = s ; 
  240.   } 
  241.   eqtb [ curval ] .hh.b1 = 1 ; 
  242.   eqtb [ curval ] .hh.b0 = c ; 
  243.   eqtb [ curval ] .hh .v.RH = o ; 
  244. #endif /* INITEX */
  245. znewsavelevel ( c ) 
  246. groupcode c ; 
  247. {r_newsavelevel 
  248.   if ( saveptr > maxsavestack ) 
  249.   {
  250.     maxsavestack = saveptr ; 
  251.     if ( maxsavestack > savesize - 6 ) 
  252.     overflow ( 399 , savesize ) ; 
  253.   } 
  254.   savestack [ saveptr ] .hh.b0 = 3 ; 
  255.   savestack [ saveptr ] .hh.b1 = curgroup ; 
  256.   savestack [ saveptr ] .hh .v.RH = curboundary ; 
  257.   if ( curlevel == 255 ) 
  258.   overflow ( 400 , 255 ) ; 
  259.   curboundary = saveptr ; 
  260.   incr ( curlevel ) ; 
  261.   incr ( saveptr ) ; 
  262.   curgroup = c ; 
  263. zeqdestroy ( w ) 
  264. memoryword w ; 
  265. {r_eqdestroy 
  266.   halfword q ; 
  267.   switch ( w .hh.b0 ) 
  268.   {case 110 : 
  269.   case 111 : 
  270.   case 112 : 
  271.   case 113 : 
  272.     deletetokenr ( w .hh .v.RH ) ; 
  273.     break ; 
  274.   case 116 : 
  275.     deletegluere ( w .hh .v.RH ) ; 
  276.     break ; 
  277.   case 117 : 
  278.     {
  279.       q = w .hh .v.RH ; 
  280.       if ( q != 0 ) 
  281.       freenode ( q , mem [(long) q ] .hh .v.LH + mem [(long) q ] .hh .v.LH + 1 ) ; 
  282.     } 
  283.     break ; 
  284.   case 118 : 
  285.     flushnodelis ( w .hh .v.RH ) ; 
  286.     break ; 
  287.   default : 
  288.     ; 
  289.     break ; 
  290.   } 
  291. zeqsave ( p , l ) 
  292. halfword p ; 
  293. quarterword l ; 
  294. {r_eqsave 
  295.   if ( saveptr > maxsavestack ) 
  296.   {
  297.     maxsavestack = saveptr ; 
  298.     if ( maxsavestack > savesize - 6 ) 
  299.     overflow ( 399 , savesize ) ; 
  300.   } 
  301.   if ( l == 0 ) 
  302.   savestack [ saveptr ] .hh.b0 = 1 ; 
  303.   else { 
  304.     savestack [ saveptr ] = eqtb [ p ] ; 
  305.     incr ( saveptr ) ; 
  306.     savestack [ saveptr ] .hh.b0 = 0 ; 
  307.   } 
  308.   savestack [ saveptr ] .hh.b1 = l ; 
  309.   savestack [ saveptr ] .hh .v.RH = p ; 
  310.   incr ( saveptr ) ; 
  311. zeqdefine ( p , t , e ) 
  312. halfword p ; 
  313. quarterword t ; 
  314. halfword e ; 
  315. {r_eqdefine 
  316.   if ( eqtb [ p ] .hh.b1 == curlevel ) 
  317.   eqdestroy ( eqtb [ p ] ) ; 
  318.   else if ( curlevel > 1 ) 
  319.   eqsave ( p , eqtb [ p ] .hh.b1 ) ; 
  320.   eqtb [ p ] .hh.b1 = curlevel ; 
  321.   eqtb [ p ] .hh.b0 = t ; 
  322.   eqtb [ p ] .hh .v.RH = e ; 
  323. zeqworddefine ( p , w ) 
  324. halfword p ; 
  325. integer w ; 
  326. {r_eqworddefine 
  327.   if ( xeqlevel [ p ] != curlevel ) 
  328.   {
  329.     eqsave ( p , xeqlevel [ p ] ) ; 
  330.     xeqlevel [ p ] = curlevel ; 
  331.   } 
  332.   eqtb [ p ] .cint = w ; 
  333. zgeqdefine ( p , t , e ) 
  334. halfword p ; 
  335. quarterword t ; 
  336. halfword e ; 
  337. {r_geqdefine 
  338.   eqdestroy ( eqtb [ p ] ) ; 
  339.   eqtb [ p ] .hh.b1 = 1 ; 
  340.   eqtb [ p ] .hh.b0 = t ; 
  341.   eqtb [ p ] .hh .v.RH = e ; 
  342. zgeqworddefin ( p , w ) 
  343. halfword p ; 
  344. integer w ; 
  345. {r_geqworddefin 
  346.   eqtb [ p ] .cint = w ; 
  347.   xeqlevel [ p ] = 1 ; 
  348. zsaveforafter ( t ) 
  349. halfword t ; 
  350. {r_sa